#include "Wpmz.h"
#include "Buffer.h"

// 包含 wpml 命名空间的完整定义
#include "wpml.h" // 假设您已经将 wpml 定义移动到了 wpml.h 文件中

// 如果 wpml 定义仍在 main.cpp 中，您需要将其移动到单独的头文件
// 或者在这里包含必要的定义

std::vector<char> Wpmz::Pack(const wpml::Document &doc)
{
    // 创建足够大的缓冲区
    CBuffer buffer(8192);

    // 使用已定义的序列化操作符
    buffer << doc;

    // 将缓冲区内容复制到 vector 中
    std::vector<char> result(buffer.Size());
    memcpy(result.data(), buffer.Data(), buffer.Size());

    return result;
}

wpml::Document Wpmz::Unpack(const std::vector<char> &data)
{
    // 创建缓冲区并加载数据
    CBuffer buffer(data.data(), data.size());

    // 重置缓冲区索引以便读取
    buffer.Reset();

    // 创建目标对象
    wpml::Document doc;

    // 使用已定义的反序列化操作符
    buffer >> doc;

    return doc;
}
